package movilmax.sia_corp.action;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import movilmax.sia_corp.model.ListaSs;
import movilmax.sia_corp.model.Listax;
import movilmax.sia_corp.model.SolicitudUpg;
import movilmax.sia_corp.model.SucursalC;
import movilmax.sia_corp.model.Usuario;

import apli.conectar.Conectar;
import basedatos.Fecha;
import basedatos.Resultado;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class CargarListaMundanza extends ActionSupport{
	
	private static final long serialVersionUID = 7642558364608981469L;
	
	
	
	
	private List<ListaSs> tabla_det;
	
	private List<Listax> lst_productos;
	private List<Listax> lst_servicios;
	private List<Listax> lst_sucursales;
	
	private SolicitudUpg solicitud;
	
	private String cod_cliente;
	private String bloquear;
	private String cod_adendun;
	
	private Map<String, SolicitudUpg> accordion;
	
	
	public String contratosXCliente(){
		accordion = new HashMap<String, SolicitudUpg>();
		Conectar BASE = new Conectar();
		Resultado RCS= new Resultado();
		Resultado RCS_= new Resultado();
		Map<?, ?> session = ActionContext.getContext().getSession();
    	Usuario USUARIO = (Usuario) session.get("ses_usuario");
    	int i=1;
    	
    	if(USUARIO==null){
			this.addActionError("La sesion del usuario ha caducado" ); 
			return ERROR;
		}
    	if(BASE.getMsg().equals("SI")){
		    String SQL=" SELECT contrato FROM contratos cn, clientes cl WHERE cn.cliente=cl.codigo AND cl.codigo='" + this.getCod_cliente() + "' AND cn.tipo='CORPORATIVO' AND cn.status != 'ANULADO' ";
		    RCS=BASE.getBaseDatos().consultar(SQL);
		    if(RCS.RP){
		    	
							do{
									solicitud= new SolicitudUpg();
									solicitud.setContrato(RCS.getCadena("contrato"));
									solicitud.setContador(String.valueOf(i));
									
									 SQL= "Select S.prospecto,S.codigo,S.obs,S.status,S.usuario,D.cod,D.cod_is,D.sucursal,D.servicio,D.producto,D.monto,U.descripcion as des_usuario,CONVERT(varchar(30),S.fecha_act,103) as fecham,S.hora_act as hora,X.descripcion as des_status,W.descripcion as des_servicio,Y.megas as des_producto,Z.descripcion as des_sucursal  " +
											 " From corp_solicitud_mud S,corp_solicitud_mud_detalle D,contratos C,usuarios U,corp_status_sol X,corp_servicios W,corp_productos Y,corp_sucursales Z Where C.contrato='"+ RCS.getCadena("contrato") + "' and C.contrato=S.contrato and S.procesado='0' and S.status=X.cod and S.usuario_act=U.usuario and S.codigo=D.solicitud and D.servicio=W.cod and D.producto=Y.cod and D.sucursal=Z.cod ";
											 RCS_=BASE.getBaseDatos().consultar(SQL);
											 if(RCS_.RP){
												 if(!RCS_.getCadena("usuario").equals(USUARIO.getUsuario())  ){
													 //solicitud.setMSG("La solicitud codigo ( "+RCS_.getCadena("codigo")+" ) , no esta asignada al usuario "+USUARIO.getDescripcion());
													// this.addActionError(solicitud.getMSG());
													 solicitud.setMSG("-1");
												 }else{
													 solicitud.setMSG("-1");
												 }
											 }else{
												 solicitud.setMSG("-1");
											 }
											 
											 
											 
											 
									tabla_det= new ArrayList<ListaSs>();
										SQL="Select T.nombres+' '+T.apellidos as des,T.identificacion,C.tipo,C.status " +
											" From clientes T,contratos C Where C.contrato='"+ RCS.getCadena("contrato") + "' and C.cliente=T.codigo ";
										RCS_=BASE.getBaseDatos().consultar(SQL);
										if(RCS_.RP){
											
											 solicitud.setContrato(RCS.getCadena("contrato"));
											 solicitud.setDes_cliente(RCS_.getCadena("des"));
											 solicitud.setDes_rif(RCS_.getCadena("identificacion"));
											 solicitud.setDes_status("NO REGISTRADA");
											 solicitud.setStatus("1000");//1000
											 solicitud.setDes_obs("NINGUNA");
											 solicitud.setFecha(new Fecha().getFecha());
											 solicitud.setHora(new Fecha().getHoras());
											 solicitud.setUsuario("NINGUNO");
											 solicitud.setCodigo("-1");
											 this.setCod_adendun("-1");
											 this.setBloquear("NO");
											 
											 SQL= "Select S.prospecto,S.codigo,S.obs,S.status,S.usuario,D.cod,D.cod_is,D.sucursal,D.servicio,D.producto,D.monto,U.descripcion as des_usuario,CONVERT(varchar(30),S.fecha_act,103) as fecham,S.hora_act as hora,X.descripcion as des_status,W.descripcion as des_servicio,Y.megas as des_producto,Z.descripcion as des_sucursal  " +
											 " From corp_solicitud_mud S,corp_solicitud_mud_detalle D,contratos C,usuarios U,corp_status_sol X,corp_servicios W,corp_productos Y,corp_sucursales Z Where C.contrato='"+solicitud.getContrato() + "' and C.contrato=S.contrato and S.procesado='0' and S.status=X.cod and S.usuario_act=U.usuario and S.codigo=D.solicitud and D.servicio=W.cod and D.producto=Y.cod and D.sucursal=Z.cod ";
											 RCS_=BASE.getBaseDatos().consultar(SQL);
											 String COD_PROSPECTO="";
											 if(RCS_.RP){
												 
												/* if(!RCS_.getCadena("usuario").equals(USUARIO.getUsuario())  ){
													 solicitud.setMSG(RCS.getCadena("contrato")+"--La solicitud codigo ( "+RCS_.getCadena("codigo")+" ) , no esta asignada al usuario "+USUARIO.getDescripcion());
													 this.addActionError(solicitud.getMSG());
													 solicitud.setMSG("-1");
												 }*/
												 
												 COD_PROSPECTO=RCS_.getCadena("prospecto");
												 solicitud.setCodigo(RCS_.getCadena("codigo"));
												 solicitud.setCod_prospecto(COD_PROSPECTO);
												 solicitud.setDes_status(RCS_.getCadena("des_status"));
												 solicitud.setStatus("16");//RCS_.getCadena("status") 
												 solicitud.setDes_obs(RCS_.getCadena("obs"));
												 solicitud.setFecha(RCS_.getCadena("fecham"));
												 solicitud.setHora(RCS_.getCadena("hora"));
												 solicitud.setUsuario(RCS_.getCadena("des_usuario"));
												 if(solicitud.getStatus().equals("1") || solicitud.getStatus().equals("2") )
													this.setBloquear("NO");
												 else
													this.setBloquear("SI"); 
												 solicitud.setCod_item(RCS_.getCadena("cod"));
												 solicitud.setCod_item_is(RCS_.getCadena("cod_is"));
												 solicitud.setSucursal(RCS_.getCadena("sucursal"));
												 solicitud.setServicio(RCS_.getCadena("servicio"));
												 solicitud.setProducto(RCS_.getCadena("producto"));
												 solicitud.setDes_sucursal(RCS_.getCadena("des_sucursal"));
												 solicitud.setDes_servicio(RCS_.getCadena("des_servicio"));
												 solicitud.setDes_producto(RCS_.getCadena("des_producto")+" Mbps");
												 
												 SQL="Select codigo From corp_adendus Where contrato='"+solicitud.getContrato() + "' and status='ENVIADA' and mudanza='1' ";
												 RCS_=BASE.getBaseDatos().consultar(SQL);
									  			 
												 if(RCS_.RP){
									  				this.setCod_adendun(RCS_.getCadena("codigo")); 
									  			 }
												 
									  			 SQL="Select Z.*,E.estado as des_estado,M.municipio as des_mun,E.estado as cod_estado " +
												 "From corp_sucursales Z,estados E,municipios M Where Z.prospecto='"+ COD_PROSPECTO + "' and Z.municipio=M.cod and M.estado=E.cod  ";
												 RCS_=BASE.getBaseDatos().consultar(SQL);
									  			 if(RCS_.RP){
									  				SucursalC sucx=new SucursalC();
									  				sucx.setTel1(RCS_.getCadena("telefono"));
									  				if(RCS_.getCadena("telefono_oficina").equals("")){
									  					sucx.setTel2("-");
									  				}else{
									  					sucx.setTel2(RCS_.getCadena("telefono_oficina"));
									  				}
									  				if(RCS_.getCadena("celular").equals("")){
									  					sucx.setTel3("-");
									  				}else{
									  					sucx.setTel3(RCS_.getCadena("celular"));
									  				}
									  				
									  				sucx.setZona(RCS_.getCadena("zona"));
									  				sucx.setCiudad(RCS_.getCadena("ciudad"));
									  				sucx.setAvcalle(RCS_.getCadena("avcalle"));
									  				
									  				sucx.setTp_inmueble(RCS_.getCadena("tipoinmueble"));
									  				sucx.setDes_inmueble(RCS_.getCadena("des_inmuemble"));
									  				sucx.setNro(RCS_.getCadena("nro_inmueble"));
									  				sucx.setPiso(RCS_.getCadena("piso_inmueble"));
									  				sucx.setDes(RCS_.getCadena("descripcion"));
									  				
									  				sucx.setDes_estado(RCS_.getCadena("des_estado"));
									  				sucx.setDes_mun(RCS_.getCadena("des_mun"));
									  				sucx.setCod_estado(RCS_.getCadena("cod_estado"));
									  				sucx.setCod_mun(RCS_.getCadena("municipio"));
									  				solicitud.setSucursal_mud(sucx);
									  			 }
											 }else{
												 
												 SQL="Select Z.cod,Z.descripcion as des_suc " +
												 " From corp_sucursales Z,detalle_servicios_corp C Where C.contrato='"+ solicitud.getContrato() + "' and C.sucursal=Z.cod ";
												 RCS_=BASE.getBaseDatos().consultar(SQL);
									  			 if(RCS_.RP){
									  				 
									  				
											  		 solicitud.setCod_item("-1");
									  				 solicitud.setCod_item_is("-1");
									  				 solicitud.setSucursal(RCS_.getCadena("cod"));
									  				 solicitud.setServicio("-1");
									  				 solicitud.setProducto("-1");
									  				 solicitud.setDes_sucursal(RCS_.getCadena("des_suc"));
									  				 solicitud.setDes_servicio("Seleccione");
									  				 solicitud.setDes_producto("Seleccione");
									  			 }else{
									  				 solicitud.setMSG("El cliente no posee servicios correctamente asociados al contrato, comuniquese con el departamento de administracion");
									  				//this.addActionError("El cliente no posee servicios correctamente asociados al contrato, comuniquese con el departamento de administracion"); 
									  			 }
											 }   
												accordion.put("dv"+i, solicitud);
												//System.out.println("--VALOR I: "+i+"-------------------CONTRATO: "+RCS.getCadena("contrato")+"-------STATUS: "+ solicitud.getStatus() +"---------------------");
												i=i+1;
												// return SUCCESS;
										}
							}while(RCS.sigItem());
		    }else{
		    	
		    	this.addActionError("El cliente no posee Servicio Corporativo");
		    	return ERROR;
		    }
		    	
    	}

    	/*
    	Iterator it = accordion.entrySet().iterator();
    	while (it.hasNext()) {
    		Map.Entry e = (Map.Entry)it.next();
    		System.out.println(e.getKey() + " " + e.getValue()+"*****************************");
    	}
    	*/
    	
    	BASE.getBaseDatos().cerrarConexion();
		return SUCCESS;
	}
	
	
	
	
	private String listar_servicios() {
		lst_servicios= new ArrayList<Listax>();
		Conectar BASE= new Conectar();
			  try{
		       String SQL="Select X.cod,UPPER(X.descripcion) as descripcion "+
	    	      "From corp_servicios X  "+
	    	      "where X.mostrar='1' and cli='1' Order by X.descripcion  "; 	 	
				Resultado  RCS=BASE.getBaseDatos().consultar(SQL);
				  if(RCS.RP){
					  do{ 
						  Listax LST=new Listax();
						  LST.setCod(RCS.getCadena("cod"));
						  LST.setDescripcion(RCS.getCadena("descripcion"));
						  lst_servicios.add(LST);
					  }while(RCS.sigItem()); 
				  }
			   }catch(Exception err  ){
					//hubo un error .....
			   }  
	      BASE.getBaseDatos().cerrarConexion();
		  return SUCCESS;
	} 
	
	private String listar_productos(){
		Conectar BASE= new Conectar();
		lst_productos= new ArrayList<Listax>();
			  try{
				  String cod_serv="0";
				  cod_serv=this.solicitud.getServicio();
				  /*Cadena C=new Cadena();
				  LinkedList vrs=C.tokens(this.solicitud.getServicio(), ",");
				  for(int i=0; i<vrs.size();i++){
					  LinkedList ids= C.tokens(this.getId_obj() ,"_");
					  String id_sel=ids.get(1).toString().trim();
					  if(id_sel.equals( C.convertirStr(i+1) ) ) {
						  cod_serv=vrs.get(i).toString();
					  }
				  }*/
		    	  String SQL="Select X.cod,X.descripcion,X.megas From corp_productos X,corp_servicios_prod Z "+
	    	         "where Z.servicio='"+ cod_serv +"' and Z.mostrar='1' and X.cod=Z.producto and X.mostrar='1' and X.megas>0 Order by X.megas ASC ";
		    	//  System.out.println("*****************************************************   "+SQL);
				  Resultado RCS=BASE.getBaseDatos().consultar(SQL);
				  if(RCS.RP){
					  do{ 
						  Listax LST=new Listax();
						  LST.setCod(RCS.getCadena("cod"));
						  //LST.setDescripcion(RCS.getCadena("descripcion"));
						  LST.setDescripcion(RCS.getCadena("megas")+" Mbps");
						  lst_productos.add(LST);
					  }while(RCS.sigItem()); 
				  }
			   }catch(Exception err  ){
					//hubo un error ...
			}
		BASE.getBaseDatos().cerrarConexion();
		  return SUCCESS;
	} 
	
	private String listar_sucursales(){
		Conectar BASE= new Conectar();
		lst_sucursales= new ArrayList<Listax>();
			  try{	
		    	String SQL="Select X.cod,UPPER(X.descripcion) as descripcion "+
	    	      "From corp_sucursales X,detalle_servicios_corp C  "+
	    	      "where C.contrato='"+solicitud.getContrato()+"' and C.sucursal=X.cod Order by X.cod ASC"; 	
				  Resultado RCS=BASE.getBaseDatos().consultar(SQL);
				  
				  if(RCS.RP){
					  do{ 
						  Listax LST=new Listax();
						  LST.setCod(RCS.getCadena("cod"));
						  LST.setDescripcion(RCS.getCadena("descripcion"));
						  lst_sucursales.add(LST);
					  }while(RCS.sigItem()); 
				  }
			   }catch(Exception err ){
					//hubo un error ...
			   }  
		   BASE.getBaseDatos().cerrarConexion();
		  return SUCCESS;
	} 
	
	
	
	
	
	
	
	public String getJSON(){
		@SuppressWarnings("rawtypes")
		Map session = ActionContext.getContext().getSession();
		Usuario USUARIO = (Usuario)session.get("ses_usuario");
		  if (USUARIO==null){
			  this.addActionError("La sesion del usuario ha caducado");
			  return ERROR;
		  }
		  Conectar BASE= new Conectar();
		  if(BASE.getMsg().equals("SI")){
			  listar_servicios();
			  listar_sucursales();
			  if(solicitud.getServicio()!=null){
			     listar_productos();  
			  }
			  BASE.getBaseDatos().cerrarConexion();
			 return SUCCESS;
		  }else{
			  this.addActionError("No hay conexion al servidor");
		      return ERROR;
		  }
    }
	
	
	
	
	
	
	
	public String getCod_cliente() {
		return cod_cliente;
	}
	public void setCod_cliente(String cod_cliente) {
		this.cod_cliente = cod_cliente;
	}

	public List<ListaSs> getTabla_det() {
		return tabla_det;
	}
	public void setTabla_det(List<ListaSs> tabla_det) {
		this.tabla_det = tabla_det;
	}
	public String getBloquear() {
		return bloquear;
	}
	public void setBloquear(String bloquear) {
		this.bloquear = bloquear;
	}
	public String getCod_adendun() {
		return cod_adendun;
	}
	public void setCod_adendun(String cod_adendun) {
		this.cod_adendun = cod_adendun;
	}
	public Map<String, SolicitudUpg> getAccordion() {
		return accordion;
	}
	public void setAccordion(Map<String, SolicitudUpg> accordion) {
		this.accordion = accordion;
	}
	public List<Listax> getLst_productos() {
		return lst_productos;
	}
	public void setLst_productos(List<Listax> lst_productos) {
		this.lst_productos = lst_productos;
	}
	public List<Listax> getLst_servicios() {
		return lst_servicios;
	}
	public void setLst_servicios(List<Listax> lst_servicios) {
		this.lst_servicios = lst_servicios;
	}
	public SolicitudUpg getSolicitud() {
		return solicitud;
	}
	public void setSolicitud(SolicitudUpg solicitud) {
		this.solicitud = solicitud;
	}
	public List<Listax> getLst_sucursales() {
		return lst_sucursales;
	}
	public void setLst_sucursales(List<Listax> lst_sucursales) {
		this.lst_sucursales = lst_sucursales;
	}
	
}
